import { ConfigService } from 'src/modules/config/services/config.service'
import { Injectable } from '@nestjs/common'

/**
 * 系统配置工具类
 * 提供便捷的配置获取方法
 */
@Injectable()
export class SystemConfigUtil {
  constructor(private configService: ConfigService) {}

  /**
   * 根据键获取配置值
   * @param key 配置键
   * @param defaultValue 默认值，当配置不存在时返回
   * @returns 配置值（自动解析JSON）
   */
  async getConfig(key: string, defaultValue?: any): Promise<any> {
    try {
      const config = await this.configService.findByKey(key)
      // 尝试解析JSON
      try {
        return JSON.parse(config.value)
        // eslint-disable-next-line @typescript-eslint/no-unused-vars
      } catch (e) {
        return config.value
      }
    } catch (e) {
      // 如果配置不存在且提供了默认值，则返回默认值
      if (defaultValue !== undefined) {
        return defaultValue
      }
      throw e
    }
  }

  /**
   * 批量获取配置值
   * @param keys 配置键数组
   * @returns 配置键值对对象（自动解析JSON）
   */
  async getConfigs(keys: string[]): Promise<Record<string, any>> {
    return this.configService.findByKeys(keys)
  }

  /**
   * 获取验证码配置
   * @returns 验证码配置对象
   */
  async getCaptchaConfig(): Promise<string> {
    return this.getConfig('captcha.enabled', true)
  }
}
